home *** CD-ROM | disk | FTP | other *** search
/ Adobe Graphics & Publishing SDK 1996 December / Adobe Graphics & Publishing SDK 1996 December.iso / pc / pm65sdk / sourcecode / c_language / exportf / common / main.cpp < prev   
C/C++ Source or Header  |  1996-10-07  |  8KB  |  333 lines

  1. /*
  2.  *--- main.cpp ----------------------------------------------------------
  3.  * Copyright (c) 1992-96 Adobe Systems, Inc.  All rights reserved.
  4.  *
  5.  * PageMaker plug-in.
  6.  *-----------------------------------------------------------------------
  7.  */
  8.  
  9. /* ---------------- PageMaker SDK include files ---------------- */
  10. #include "PMPlugin.h"
  11.  
  12. /* ---------------- Plug-in include files ---------------- */
  13. #include "ExportF.h"
  14. #include "Convert.h"
  15.  
  16. #ifdef MACINTOSH
  17.     #include "WinTypes.h"
  18. #endif //MACINTOSH
  19.  
  20. /* ---------------- Cross-platform include files ---------------- */
  21. #include <string.h>
  22. #include <stdio.h>
  23.  
  24. /* ---------------- Platform specific include files ---------------- */
  25. #ifdef MACINTOSH
  26.     #include <types.h>
  27.     #ifndef powerc
  28.         #include <A4Stuff.h>
  29.         #include <SetUpA4.h>
  30.     #endif
  31. #else
  32.     #include <windows.h>
  33. #endif
  34.  
  35. /* ---------------- Type definitions ---------------- */
  36.  
  37. /* ---------------- Definitions ---------------- */
  38. #define SUCCESS    1
  39. #define FAILURE 0
  40. #define STAYINMEMORY -1
  41.  
  42. /* ---------------- PageMaker (New)SDK include files ---------------- */
  43. #include "CIInterfaceManager.h"
  44. #include "PMEvent.h"
  45. #include "CIBasic.h"
  46. #include "PMInterfaceIDs.h"
  47. #include "CICommandsAndQueries.h"
  48.  
  49. /* ---------------- Function declarations ---------------- */
  50. PMXErr DoInvoke( PMMessage *pMsg );
  51. PMXErr DoLoad(PMMessage* pMsg);
  52. PMXErr DoRegister(PMMessage* pMsg);
  53. PMXErr DoInvoke(PMMessage* pMsg);
  54. PMXErr DoEvent(PMMessage* pMsg);
  55. PMXErr DoSysEvent(PMMessage* pMsg);
  56. PMXErr DoAcquireInterface(PMMessage* pMsg);
  57. PMXErr DoReleaseInterface( PMMessage *pMsg );
  58. PMXErr DoUnload(PMMessage* pMsg);
  59. PMXErr DoShutdown(PMMessage* pMsg);
  60. PMXErr DoCleanup(PMMessage* pMsg);
  61.  
  62. #ifdef MACINTOSH
  63.     #ifdef powerc
  64.         #pragma export on
  65.     #endif
  66.         PMXErr main(PMMessage *pMsg);
  67.     #ifdef powerc
  68.         #pragma export off
  69.     #endif
  70. #else
  71.     BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID pReserved);
  72. #endif
  73.  
  74. #ifdef powerc
  75.     #pragma export on
  76. #endif
  77.     PMXErr    ConvertMeas(kUnits srcType, float srcSize, kUnits destType, char *destStr, 
  78.                     float *destSize, size_t *destStrLen, PMBool localise);
  79. #ifdef powerc
  80.     #pragma export off
  81. #endif
  82.  
  83. /* ---------------- Globals ---------------- */
  84. sPMParamBlockPtr thePB = NULL;
  85. CICommandQuery *pCmdQry = (CICommandQuery *)NULL;
  86. CIInterfaceManager    *gpIntfMgr;
  87. extern kUnits    gSrcType, gDestType;
  88. extern PMBool        gLocalise;
  89.  
  90. #ifdef WINDOWS
  91.     HINSTANCE ghDLL;
  92.  
  93.     BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID pReserved)
  94.     {
  95.         ghDLL = hDLL;
  96.     
  97.         return TRUE;
  98.     }
  99. #endif
  100.  
  101. /*
  102.  *--- main --------------------------------------------------------------------
  103.  *  Entry point for plug-in control tasks.
  104.  *-----------------------------------------------------------------------------
  105.  */ 
  106. PMXErr main(PMMessage *pMsg)
  107. {
  108.     PMXErr    result;
  109. #if __MWERKS__ && __MC68K__
  110.     long oldA4 = SetCurrentA4();
  111.     RememberA4();
  112. #endif
  113.  
  114.     gpIntfMgr = pMsg->pInterfaceMgr;
  115.     
  116.     switch ( pMsg->opCode ) {
  117.         case kPMLoad: 
  118.             result = DoLoad(pMsg);
  119.             break;
  120.  
  121.         case kPMRegister: 
  122.             result = DoRegister(pMsg);
  123.             break;
  124.             
  125.         case kPMInvoke: 
  126.             result = DoInvoke(pMsg);
  127.             break;
  128.  
  129.         case kPMEvent: 
  130.             result = DoEvent(pMsg);
  131.             break;
  132.             
  133.         case kPMSysEvent: 
  134.             result = DoSysEvent(pMsg);
  135.             break;
  136.             
  137.         case kPMAcquireInterface: 
  138.             result = DoAcquireInterface(pMsg);
  139.             break;
  140.             
  141.         case kPMReleaseInterface: 
  142.             result = DoReleaseInterface(pMsg);
  143.             break;
  144.             
  145.         case kPMUnload: 
  146.             result = DoUnload(pMsg);
  147.             break;
  148.  
  149.         case kPMShutdown: 
  150.             result = DoShutdown(pMsg);
  151.             break;
  152.             
  153.         case kPMCleanup: 
  154.             result = DoCleanup(pMsg);
  155.             break;
  156.             
  157.         default: 
  158.             result = 0;
  159.     }
  160.  
  161. #if __MWERKS__ && __MC68K__
  162.     SetA4(oldA4);
  163. #endif
  164.  
  165.     return result;
  166. }
  167.  
  168. /*
  169.  *--- DoRegister --------------------------------------------------------------
  170.  *  Called if Plug-in registers for Events or adds new interfaces to PM.
  171.  *-----------------------------------------------------------------------------
  172.  */ 
  173. PMXErr DoRegister( PMMessage *pMsg )
  174. {
  175.     PMXErr result = SUCCESS;
  176.     gpIntfMgr = pMsg->pInterfaceMgr;
  177.  
  178.     gpIntfMgr->AddPMInterface(PIConvertName);
  179.  
  180. /*
  181.     {
  182.         LPVOID theInterface;
  183.         gpIntfMgr->AcquirePMInterface(PIConvertName, &theInterface);
  184.         gpIntfMgr->ReleasePMInterface(PIConvertName, &theInterface);
  185.     }
  186. */
  187.     return result;
  188. }
  189.  
  190. /*
  191.  *--- DoAcquireInterface ------------------------------------------------------
  192.  *  Called when other plug-ins acquire the exported interface.
  193.  *-----------------------------------------------------------------------------
  194.  */ 
  195. PMXErr DoAcquireInterface( PMMessage *pMsg )
  196. {
  197.     PMXErr result = SUCCESS;
  198.     
  199.     PMInterface *pPMInterface = (PMInterface*)pMsg->pPMData;
  200.  
  201.     if (strcmp(pPMInterface->pInterfaceName, PIConvertName) == 0)
  202.         pPMInterface->pInterface = (LPVOID *)ConvertMeas;
  203.     else
  204.         return FAILURE;
  205.  
  206.  
  207.     return result;
  208. }
  209.  
  210. /*
  211.  *--- DoReleaseInterface ------------------------------------------------------
  212.  *  Called when other plug-ins release the acquired interface.
  213.  *-----------------------------------------------------------------------------
  214.  */ 
  215. PMXErr DoReleaseInterface( PMMessage *pMsg )
  216. {
  217.     PMXErr result = SUCCESS;
  218.             
  219.     return result;
  220. }
  221.  
  222. /*
  223.  *--- DoInvoke ----------------------------------------------------------------
  224.  *  
  225.  *-----------------------------------------------------------------------------
  226.  */ 
  227. PMXErr DoInvoke( PMMessage *pMsg )
  228. {
  229.     PMXErr result;
  230.         
  231.     return SUCCESS;
  232. }
  233.  
  234. /*
  235.  *--- DoLoad ------------------------------------------------------------------
  236.  *  
  237.  *-----------------------------------------------------------------------------
  238.  */ 
  239. PMXErr DoLoad(PMMessage* pMsg)
  240. {
  241. #pragma unused (pMsg)
  242.     return CQ_SUCCESS;
  243.  
  244. }
  245.  
  246. /*
  247.  *--- DoEvent -----------------------------------------------------------------
  248.  *  
  249.  *-----------------------------------------------------------------------------
  250.  */ 
  251. PMXErr DoEvent(PMMessage* pMsg)
  252. {
  253. #pragma unused (pMsg)
  254.     return CQ_SUCCESS;
  255. }
  256.  
  257. /*
  258.  *--- DoSysEvent --------------------------------------------------------------
  259.  *  
  260.  *-----------------------------------------------------------------------------
  261.  */ 
  262. PMXErr DoSysEvent(PMMessage* pMsg)
  263. {
  264. #pragma unused (pMsg)
  265.     return CQ_SUCCESS;
  266. }
  267.  
  268. /*
  269.  *--- DoUnload ----------------------------------------------------------------
  270.  *  
  271.  *-----------------------------------------------------------------------------
  272.  */ 
  273. PMXErr DoUnload(PMMessage* pMsg)
  274. {
  275. #pragma unused (pMsg)
  276.     return STAYINMEMORY; //we want to stay in memory
  277. }
  278.  
  279. /*
  280.  *--- DoShutdown --------------------------------------------------------------
  281.  *  
  282.  *-----------------------------------------------------------------------------
  283.  */ 
  284. PMXErr DoShutdown(PMMessage* pMsg)
  285. {
  286. #pragma unused (pMsg)
  287.     return CQ_SUCCESS;
  288. }
  289.  
  290. /*
  291.  *--- DoCleanup ---------------------------------------------------------------
  292.  *  
  293.  *-----------------------------------------------------------------------------
  294.  */ 
  295. PMXErr DoCleanup(PMMessage* pMsg)
  296. {
  297. #pragma unused (pMsg)
  298.     return CQ_SUCCESS;
  299. }
  300.  
  301. /*
  302.  *--- ConvertMeas -------------------------------------------------------------
  303.  *  Actual Interface exported by this plug-in.
  304.  *
  305.  *    In:
  306.  *        Source Unit Type
  307.  *        Source Value
  308.  *        Destination Unit Type
  309.  *        Boolean -- Localise the string? Comma instead of point for decimal sep.
  310.  *
  311.  *    Out:
  312.  *        Converted value as a string with unit type
  313.  *        Converted value as number
  314.  *        String lenght
  315.  *-----------------------------------------------------------------------------
  316.  */ 
  317. PMXErr ConvertMeas(kUnits srcType, float srcSize, kUnits destType, char *destStr, 
  318.                 float *destSize, size_t *destStrLen, PMBool localise)
  319. {
  320.     PMXErr    result = SUCCESS;
  321.  
  322.     if (!gpIntfMgr->AcquirePMInterface((unsigned long)PMIID_CMDQRY, (LPVOID *)&pCmdQry))
  323.         pCmdQry->Retrieve (&thePB);
  324.     else
  325.         return CQ_FAILURE;
  326.     
  327.     result = Convert(srcType, srcSize, destType, destStr, destSize, destStrLen, localise);
  328.     
  329.     gpIntfMgr->ReleasePMInterface((LPVOID *)pCmdQry);
  330.     
  331.     return result;
  332. }
  333.